/* main.c */
#include "app_inc.h"

/*
* Application Function Declerations.
*/
void LED_Configuration(void);
void LED_LightOn(uint32_t ledIdx);
void LED_LightOff(uint32_t ledIdx);

/*
* Application Entry.
*/
int main(void)
{
    uint32_t i;

    BSP_InitStdioUART(115200U);

    printf("\r\n\r\n# GPIO_ToggleLED Exampler #\r\n");

    /* Initialize the application. */
    printf("# Initializing ...\r\n");
    
    LED_Configuration();
    
    printf("# Ready.\r\n");
    
    /* Print the user guide. */
    printf("Press any key to toggle the LEDs ...\r\n");
    
    while (1)
    {
        for (i = 0U; i < 3U; i++)
        {
            getchar();
            LED_LightOn(i);
            getchar();
            LED_LightOff(i);
        }
    }
}

void LED_Configuration(void)
{
    GPIO_InitPara GPIO_InitStructure;
    RCC_APB2PeriphClock_Enable(RCC_APB2PERIPH_GPIOD,ENABLE);

    GPIO_InitStructure.GPIO_Pin = GPIO_PIN_11 | GPIO_PIN_12| GPIO_PIN_13;
    GPIO_InitStructure.GPIO_Mode = GPIO_MODE_OUT_PP;
    GPIO_InitStructure.GPIO_Speed = GPIO_SPEED_50MHZ;
    GPIO_Init(GPIOD,&GPIO_InitStructure);

    GPIO_InitStructure.GPIO_Pin = GPIO_PIN_11 | GPIO_PIN_12 | GPIO_PIN_13;
    GPIO_Init(GPIOD,&GPIO_InitStructure);
}

const uint16_t gLedPins[] = {GPIO_PIN_11, GPIO_PIN_12, GPIO_PIN_13}; 

void LED_LightOn(uint32_t ledIdx)
{
    if (ledIdx >= sizeof(gLedPins)/sizeof(gLedPins[0]))
    {
        return;
    }
    GPIO_SetBits(GPIOD, gLedPins[ledIdx]);
}

void LED_LightOff(uint32_t ledIdx)
{
    if (ledIdx >= sizeof(gLedPins)/sizeof(gLedPins[0]))
    {
        return;
    }
    GPIO_ResetBits(GPIOD, gLedPins[ledIdx]);
}


/* EOF. */
